Import notebook
You can treat notebooks as sort of modules with its own isolated context. It might come handy, if you don't want to create a library, but still like to reuse some functions or templates from the other notebook.
We have registered a special importer "WLN" for that reason
Import[path_String, "WLN"] _Promise
What it does?
- Evaluate all initialization cells in the isolated context (can be any kind of cell)
- Evaluate the last input cell in the notebook and return the result (must be wolfram language cell)
Since it involves breaking the order of evaluation, Import will return Promise, that you would need to resolve
Then[Import[
"path_to_my_notebook.wln",
"WLN"
], Function[result,
(* do something with the result *)
]];
Example
Let's make a notebook with WLX template, that you would like to reuse in other presentation notebooks
- Create a regular notebook with any structure you like
- Create a cell with our template (no need in evaluation)
.wlx
MakeTitle[Title__String] := MakeTitle[StringJoin[Title]]
MakeTitle[Title_String] := With[{
logo = "https://www.trr360.de/wp-content/uploads/2022/04/cropped-logo_small-1.png"
},
<div class="relative flex w-full text-left flex-row gap-x-4" style="align-items: center; margin-bottom:1.5rem;">
<div style="bottom:0; z-index:1; position: absolute; background: linear-gradient(to left, red, blue, green); width: 100%; height: 0.7rem;"></div>
<img style="margin:0; z-index:2; padding:0rem;" width="120" src="{logo}"/>
<h2><Title/></h2>
</div>
]
- Make it
initialization cell - Create a last single input cell
MakeTitle
This will basically "return" generated symbol from our notebook.
- Save you notebook as
template.wln
Now, it's time to test it!
- In your new notebook import the defined template
Then[Import[
"template.wln",
"WLN"
], Function[result,
BigTitle = result;
]];
- Use it in the desired context
.slide
<!-- .slide: class="text-left h-full" style="height:100%" -->
<BigTitle>$Fe_x Zn_{2-x} Mo_3 O_8$ is a platform for</BigTitle>
Content goes...
Content goes...
Content goes...

It does not have to be WLX template, it can be anything: regular Wolfram Expressions, dynamic content, module, a library and etc.
Benefits
- You can place tests, documentation in the same single file
- Fully lexically isolated
- Easier to deal with compared to Wolfram Packages
- Technically supports mixed content (Javascript code, HTML, WL)